/**
 * (C)2012 Exlu Corporation. All rights reserved.
 * 注意事項   :
 */
package cn.exlu.wea.field.validator;

import java.text.CharacterIterator;
import java.text.StringCharacterIterator;

/**
 * 特定校验类
 * @author Mark 
 * @version 1.0.1.1
 * @CreateTime 2012-12-10
 * @UpdateTime 2013-05-28
 */
public final class LpValidatorSpecificUtil {
    
    /**
     * 判断字符串是否全为中文。
     * 状态：该方法尚未进行测试验证。
     * @param str 源字符串
     * @return true 全中文 false 不全是中文
     */
    public static boolean isChinese(String str){
        CharacterIterator ite = new StringCharacterIterator(str);

        for (char c = ite.first(); c != CharacterIterator.DONE; c = ite.next()) {
            if (c >= '\u4e00' && c <= '\u9fa5') {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 模糊匹配
     * @param pattern    模糊模式
     * @param str    待匹配的字符串
     * @return    匹配成功则返回true，否则返回false
     */
    public static boolean isFuzzyMatch(String pattern, String str) {
        int patternLength = pattern.length();
        int strLength = str.length();
        int strIndex = 0;
        char ch;
        for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {
            ch = pattern.charAt(patternIndex);
            if (ch == '*') {
                //通配符星号*表示可以匹配任意多个字符
                while (strIndex < strLength) {
                    if (isFuzzyMatch(pattern.substring(patternIndex + 1),
                            str.substring(strIndex))) {
                        return true;
                    }
                    strIndex++;
                }
            } else if (ch == '?') {
                //通配符问号?表示匹配任意一个字符
                strIndex++;
                if (strIndex > strLength) {
                    //表示str中已经没有字符匹配?了。
                    return false;
                }
            } else {
                if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {
                    return false;
                }
                strIndex++;
            }
        }
        return (strIndex == strLength);
    }
}
